package com.cy.wenxinapi.aichat.impl;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.cy.wenxinapi.aichat.AIChatService;
import com.cy.wenxinapi.vo.InterviewParamsVo;
import com.gearwenxin.client.ernie.ErnieBot4Client;
import com.gearwenxin.client.ernie.ErnieBotClient;
import com.gearwenxin.client.ernie.ErnieBotTurboClient;
import com.gearwenxin.entity.response.ChatResponse;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: c
 * @date: 2024/2/25 10:23
 * @description:
 */

@Service
public class AIChatServiceimpl implements AIChatService {

//    @Resource
//    private ErnieBot4Client ernieBot4Client;

    @Resource
    private ErnieBotClient ernieBot4Client;

    @Override
    public String getAiChatAnswer(String question) {
//        从聊天机器人中拿到响应结果，原始是异步的，现在需要使用阻塞去拿到结果
        ChatResponse chatResponse = ernieBot4Client.chatSingle(question).block();
        if (chatResponse != null) {
            return chatResponse.getResult();
        }

        return null;
    }

    @Override
    public List<String> getAiChatAnswerJSONList(String questionStr) {

        String replace = questionStr.replace("```json", "").replace("```", "");
        String s = cleanAnswer(replace);
        JSONArray questions = JSON.parseArray(s);
        List<String> questionStrings = new ArrayList<>();
        for (int i = 0; i < questions.size(); i++) {
            questionStrings.add(questions.getString(i));
        }
        return questionStrings;
    }

    public String cleanAnswer(String text) {
        int startIndex = text.indexOf("[") ;
        int endIndex = text.indexOf("]")+1;

        String questionListText = text.substring(startIndex, endIndex);

        return questionListText;
    }

    @Override
    public String getPrompt(InterviewParamsVo question, Integer num) {

        String firstQuestionFormat = "假设你是%s面试官，工作岗位要求是%s，我的工作经历是%s，我希望你提出6个面试问题，要求要包含3个专业技能类问题，3个行为类面试问题，6个面试问题具有一定的随机性,直接以字符串json数组格式给出6道题目。";
                String formattedQuestion = String.format(firstQuestionFormat, question.getJob(), question.getRequirement(), question.getExperience(), num);
        return formattedQuestion;
    }

    @Override
    public String getQuestionPrompt(InterviewParamsVo vo) {
        String originPrompt = "假设你是面试官，要面试【%s】这个岗位，面试对象是一名大学生，我希望" +
                "你提出6个实际面试过程中面试官最有可能会问到的问题。要求有3点，优先级" +
                "第1点最重要，其次第 2 点，再次第3点： 第1点：一共6个问题，不能超过6" +
                "题，也不能少于6题 第2：6道问题中需要包含3道专业技能类问题，3道行为" +
                "类面试问题。 第3点：6道问题中4个和岗位需求直接相关的，另外2个是大学生的" +
                "简历相关。第4点：问题格式要求，每一题前面标注是“专业技能类或行为类”，每题结" +
                "束标注是“岗位相关 或 简历相关”，例如“【专业技能类】+{问题}+【岗位相关】" +
                ";以下是岗位需求" +
                "%s"+

                ";以下是大学生的简历" +
                "%s"

                + " ;最后回复格式要求：json数组，JSON为题干内容，具体格式类似[\"xxx\",\"xxx\",\"xxx\",\"xxx\",\"xxx\",\"xxx\",\"xxx\"]";

        return String.format(originPrompt.replace("/n", ""), vo.getJob(), vo.getRequirement(), vo.getExperience());
    }


}
